﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;  


namespace Chenxin.Lib.Utility
{
    //****************************************************************
    //   臣信二手房
    //   Copyright (c) 2010 Chenxin.                        
    //****************************************************************
    //****************************************************************      
    //作成者       :  he.jifeng   
    //创建日期     :  2010-02-24                 
    //確認者       :  確認者          
    //功能概要　   :  Json数据的序列化，反序列化
    //****************************************************************
    public static class JsonHelper<T>
    {
        [Serializable]
        struct _JsonResult
        {
            public string RetFlg;
            public T Data;
        }

        static JsonHelper()
        { }

        //*******************************************
        //功能概要       ：序列化为JSON对象
        //参数説明       ：obj 序列化对象
        //返回值説明     ：序列化结果
        //功能詳細       ：序列化为JSON对象(RetFlg:;Data:的形式)
        //作成者         ：he.jifeng
        //作成日         ：2010-03-04 
        //*******************************************
        public static string WriteObject(string strRet,T obj)
        {
            _JsonResult JsonResult = new JsonHelper<T>._JsonResult();
            JsonResult.RetFlg = strRet;
            JsonResult.Data = obj;

            var serializer = new DataContractJsonSerializer(typeof(_JsonResult));
            var mstream = new MemoryStream();
            serializer.WriteObject(mstream, JsonResult);
            byte[] Bytes = new byte[mstream.Length];
            mstream.Position = 0;
            mstream.Read(Bytes, 0, (int)mstream.Length);
            return Encoding.UTF8.GetString(Bytes);
        }

        //*******************************************
        //功能概要       ：序列化为JSON对象
        //参数説明       ：obj 序列化对象
        //返回值説明     ：序列化结果
        //功能詳細       ：序列化为JSON对象
        //作成者         ：he.jifeng
        //作成日         ：2010-03-01 
        //*******************************************
        public static string WriteObject(T obj)
        {
            var serializer = new DataContractJsonSerializer(typeof(T));
            var mstream = new MemoryStream();
            serializer.WriteObject(mstream, obj);
            byte[] Bytes = new byte[mstream.Length];
            mstream.Position = 0;
            mstream.Read(Bytes, 0, (int)mstream.Length);
            return Encoding.UTF8.GetString(Bytes);
        }

        //*******************************************
        //功能概要       ：JSON对象反序列化
        //参数説明       ：data 反序列化字符串
        //返回值説明     ：JSON对象反序列化
        //功能詳細       ：反序列化
        //作成者         ：he.jifeng
        //作成日         ：2010-03-01
        //*******************************************
        public static T ReadObject(string data)
        {
            var mstream = new MemoryStream(Encoding.UTF8.GetBytes(data));
            var serializer = new DataContractJsonSerializer(typeof(T));
            return (T)serializer.ReadObject(mstream);
        }    
    
    }
}
